//! TOML配置文件解析器
//! 
//! 支持TOML格式的配置文件加载

use crate::cluster::ClusterConfig;
use crate::config::config_loader::ConfigLoader;
use anyhow::{Result, anyhow};
use std::fs;
use std::path::Path;
// use std::time::Duration; // 暂时未使用
use toml;

/// TOML配置文件解析器
/// 
/// 实现ConfigLoader trait，支持TOML格式配置文件
pub struct TomlConfigParser;

impl ConfigLoader for TomlConfigParser {
    fn load_from_file(&self, path: &Path) -> Result<ClusterConfig> {
        let content = fs::read_to_string(path)?;
        self.load_from_string(&content)
    }
    
    fn load_from_string(&self, content: &str) -> Result<ClusterConfig> {
        // 直接解析为ClusterConfig，因为它已经实现了Serialize/Deserialize
        let config: ClusterConfig = toml::from_str(content)
            .map_err(|e| anyhow!("解析TOML配置失败: {}", e))?;
        
        Ok(config)
    }
    
    fn supported_extensions(&self) -> Vec<&'static str> {
        vec!["toml"]
    }
    
    fn loader_name(&self) -> &'static str {
        "TOML Configuration Parser"
    }
    
    fn validate_format(&self, content: &str) -> bool {
        // 尝试解析TOML内容
        toml::from_str::<toml::Value>(content).is_ok()
    }
}

impl TomlConfigParser {
    /// 从TOML文件加载配置（兼容旧接口）
    pub fn from_toml_file<P: AsRef<Path>>(path: P) -> Result<ClusterConfig> {
        let parser = TomlConfigParser;
        parser.load_from_file(path.as_ref())
    }
}

